package com.mcm.modelos;

import java.util.LinkedList;

import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;

import com.mcm.dto.Producto;
import com.mcm.servicios.ProductoServicio;

public class ModeloProducto extends AbstractTableModel implements TableModelListener
{
	private static final long serialVersionUID = 3395990678215457645L;

	// private Object[][] data = null;
	private String[] columnNames = { "Producto",
			// "Precio",
			"Precio Venta", "Cantidad", "C" };
	private final LinkedList<Producto> list;

	public ModeloProducto()
	{
		this.addTableModelListener(this);
		ProductoServicio servicio = new ProductoServicio();
		list = servicio.getProductos();
	}

	public LinkedList<Producto> getList()
	{
		return list;
	}

	public int getColumnCount()
	{
		return columnNames.length;
	}

	public int getRowCount()
	{
		return list.size();
	}

	public String getColumnName(int col)
	{
		return columnNames[col];
	}

	public Object getValueAt(int row, int col)
	{
		switch (col) {
		case 0:
			return list.get(row).getDescripcion();
			// case 1: return list.get(row).getPrecio();
		case 1:
			return list.get(row).getPrecioVenta();
		case 2:
			return list.get(row).getCantidad();
		case 3:
			return list.get(row).isChequeado();
		}
		return null;
	}

	@Override
	public void setValueAt(Object value, int row, int col)
	{
		switch (col) {
		case 0:
			list.get(row).setDescripcion((String) value);
			break;
		// case 1: list.get(row).setPrecio(Double.valueOf((String)value));break;
		case 1:
			list.get(row).setPrecioVenta(Double.valueOf((String) value));
			break;
		case 2:
			list.get(row).setCantidad(Integer.valueOf((String) value));
			break;
		case 3:
			list.get(row).setChequeado((Boolean) value);
			break;
		}
		fireTableCellUpdated(row, col);
	}

	public boolean isCellEditable(int row, int col)
	{
		return col==3;
	}

	public void addElement(Producto p)
	{
		list.add(p);
		fireTableRowsInserted(list.size() - 1, list.size() - 1);
	}

	public void removeElement(Producto p)
	{
		list.remove(p);
		fireTableRowsDeleted(list.size() - 1, list.size() - 1);
	}

	public Producto getElementByRow(int row)
	{
		return list.get(row);
	}

	public void tableChanged(TableModelEvent e)
	{

	}
	
	public void borrarSeleccion()
	{
		for(Producto pv : list)
		{
			pv.setChequeado(false);
		}
	}
}